Introduzione all'assembly
Gennaio 2000 - Cosma Colanicchia
cloud.cc@tiscalinet.it
Ottimizzato per la risoluzione di 1024x768 pixel


appendice
  sistemi di numerazione
  le istruzioni dell'i8086

sistemi di numerazione Normalmente siamo abituati ad usare il sistema di numerazione base 10: abbiamo a disposizione 10 simboli (0-9). Nel computer però è fisicamente molto difficile conservare informazioni in questo modo. Molto più comodo utilizzare solo due simboli: 0 ed 1 (oppure Alto e Basso, Vero e Falso...). Il sistema che utilizza solo i simboli 0 ed 1 si chiama sistema binario. Come il sistema decimale, anche quello binario è un sistema di numerazione posizionale, cioè in cui il valore di una cifra dipende dalla posizione che occupa all'interno del numero.
Nel sistema decimale, il numero 234 vale:
4 * 10 0 + 3 * 10 1 + 2 * 10 2 = 4 * 1 + 3 * 10 + 2 * 100 = 4 + 30 + 200 = 234
ogni cifra cioè ha valore base di numerazione posizione, dove la posizione 0 è quella corrispondente all'ultima cifra (a destra).
In binario il processo è analogo:
In binario, il numero (a quattro bit) 0110 vale:
0 * 2 0 + 1 * 2 1 + 1 * 2 2 + 0 * 2 3 = 0 * 1 + 1 * 2 + 1 * 4 + 0 * 8 = 0 + 2 + 4 + 0 = 6

e infatti 0110 è la configurazione binaria del numero decimale 6.

Abbiamo già visto, così, come si converte un numero da base 2 a base 10. Vediamo ora il processo inverso: per ottenere il valore binario di un numero decimale si utilizza la tecnica delle divisioni successive: si divide il numero per 2, poi si considera il quoziente e si divide di nuovo per due e così via fino a quando il quoziente non diventa 0. Allora, prendendo i resti delle divisioni nell'ordine invertito (partendo dall'ultimo) otteniamo la configurazione base 2.
esempio: convertire il numero 610 a 62 (vediamo se corrisponde :-)
6/2 = quoziente 3 resto 0
3/2 = quoziente 1 resto 1
1/2 = quoziente 0 resto 1
prendiamo i resti al contrario: 110, che è equivalente al valore 01102 che avevamo visto essere uguale a 610

Vediamo una tabella dei primi numero decimali e i corrispondenti valori binari
 

Base 10 Base 2
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010
11 1011
12 1100
13 1101
14 1110
15 1111

vediamo che con 4 bit possiamo arrivare a contare 16 valori (da 0 a 15). Più in generale, con n bit possiamo contare 2n numeri. Con 8 bit possiamo contare 256 diverse configurazioni binare, con 16 bit 65536 configurazioni e così via.
Ma se volessimo contare numeri negativi? in questo caso dobbiamo utilizzare una notazione molto simile a quella binaria pura, detta complemento a due. Per calcolare il valore in complemento a due di un numero binario basta complementare tutti i bit del numero (ogni bit se è 0 diventa 1, se è 1 diventa 0: si tratta dell'operazione logica NOT), e poi bisogna aggiungere 1 al risultato (l'addizione in binario è praticamente identica a quella base 10, basta considerare che utilizziamo sono due simboli anzichè 10). Vediamo:
Abbiamo il valore 510 = 1012 : calcoliamo quanto vale -5 in notazione complemento a 2
0 1 0 1    valore binario del numero assoluto
1 0 1 0    valore binario complementato
1 0 1 1    valore binario complementato + 1

1011 è il valore di -5.
NB Se avessimo calcolato il risultato su 3 bit anzichè su quattro, il primo bit sarebbe andato perso e l'OF (flag di overflow) sarebbe stato posto a 1
Proviamo ad addizionare il valore di 5 e di - 5:
 

La somma è molto simile a quella classica in decimale
1 + 1 = 10
scrivo 0 e riporto di 1
0 + 1 + 1 = 10
scrivo 0 e riporto di 1
0 + 1 + 1 = 10
scrivo 0 e riporto di 1
0 + 1 + 1 = 10
scrivo 0 e riporto 1 sulla prima cifra

Vediamo che il risultato, se consideriamo solo i nostri 4 bit, è 0 come dovrebbe essere.

Un altro sistema di numerazione molto utilizzato è quello esadecimale, base 16. Abbiamo a disposizione 16 simboli: i primi dieci sono visualizzati come numero (0 - 9) e i restanti con le prime 6 lettere dell'alfabeto (A - F). Con una singola cifra possiamo contare quindi da 0 a F. Contare in esadecimale è molto comodo, perchè ad ogni cifra base sedici corrispondono esattamente 4 cifre binarie (ricordate la tabella di poco fa?). La conversione tra questi due formati è quindi molto immediata:
calcoliamo quanto vale 00010101 binario in esadecimale: basta prendere cifre quattro a quattro e risalire al corrispondente valore esadecimale:
0001 = 1
1100 = C
quindi il valore esadecimale è 1Ch (si legge "uno C esadecimale")
Vediamo la tabella completa con i tre sistemi di numerazione che ci interessano.

Decimale Binario Esadecimale
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

le istruzioni dell'8086

Qui sono riportate le istruzioni dell'8086.


torna alla homepage / torna all'inizio